package com.example.test02.util;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

public class VideoSaver {

    private static final String TAG = "VideoSaver";

    /**
     * 将视频文件保存到系统相册
     *
     * @param context     上下文
     * @param videoFile   要保存的视频文件
     * @param displayName 视频文件的显示名称（例如 "my_video.mp4"）
     */
    public static void saveVideoToGallery(Context context, File videoFile, String displayName) {
        // 检查视频文件是否存在
        if (videoFile == null || !videoFile.exists()) {
            Log.e(TAG, "视频文件不存在");
            Toast.makeText(context, "视频文件不存在", Toast.LENGTH_SHORT).show();
            return;
        }

        // 创建 ContentValues 对象，用于存储视频文件的元数据
        ContentValues values = new ContentValues();
        values.put(MediaStore.Video.Media.DISPLAY_NAME, displayName);
        values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
        values.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES);

        // 获取 ContentResolver
        ContentResolver resolver = context.getContentResolver();

        // 插入视频文件到 MediaStore
        Uri uri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
        if (uri == null) {
            Log.e(TAG, "无法创建视频文件 URI");
            Toast.makeText(context, "无法保存视频", Toast.LENGTH_SHORT).show();
            return;
        }

        // 将视频文件写入 MediaStore
        try (FileInputStream inputStream = new FileInputStream(videoFile);
             OutputStream outputStream = resolver.openOutputStream(uri)) {

            if (outputStream == null) {
                throw new IOException("无法打开输出流");
            }

            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }

            Log.d(TAG, "视频已保存到相册: " + uri);
            Toast.makeText(context, "视频已保存到相册", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Log.e(TAG, "保存视频失败", e);
            Toast.makeText(context, "保存视频失败", Toast.LENGTH_SHORT).show();
        }
    }
}
